abstract class FieldTypeInterface {
  Map<String, FieldWrapper> getFieldTypeMap();
}

enum FieldType {
  byte,
  short,
  int,
  long,
  boolean,
  date,
  string,
}

typedef void Setter<T extends FieldTypeInterface, K>(T obj, K? value);
typedef K? Getter<T extends FieldTypeInterface, K>(T obj);

class FieldWrapper<T extends FieldTypeInterface, K> {
  FieldType fieldType;
  Getter<T, K?> getter;
  Setter<T, K?> setter;

  FieldWrapper(this.fieldType, this.getter, this.setter);
}